【问题标题】:Creating QWidget in a class在类中创建 QWidget
【发布时间】:2017-08-16 07:18:29
【问题描述】:

我正在尝试在我的班级中创建一个窗口。

我浏览了文档:http://doc.qt.io/qt-5/qtwidgets-tutorials-widgets-toplevel-example.html

QApplication a(argc, argv);
QWidget window;
window.show();
return a.exec();

当代码在 main.cpp 中时,这确实会显示窗口。

但我想在其他类中创建窗口。 当我使用这条线时:

QWidget window;
window.show();

它没有给我窗口,程序也没有退出。

那么我们如何在我们自己的类中创建 QT 中的小部件?

【问题讨论】:

  • 您的代码可能不起作用,因为小部件在作用域(您的函数?)结束时被销毁,所以它在您显示后立即被删除。您需要更多地了解 C++ 对象生命周期以及 Qt 如何处理内存管理。
  • @xander 所以如果我想在我的班级而不是在主班中创建我的小部件,那么我应该怎么做呢?

标签: c++ qt qwidget


【解决方案1】:

这是一个初始化和自定义的示例QWidget:

#include <QWidget>

void FileManager::initializeMyWidget()
{
    QWidget *myWidget= new QWidget();
    myWidget->setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
    myWidget->setWindowFlags(windowFlags() | Qt::CustomizeWindowHint | Qt::WindowStaysOnTopHint);
    QIcon iconMyWidget(":/Images/Images/image.png");
    myWidget->setWindowIcon(iconMyWidget);
    QHBoxLayout *mainLayout = new QHBoxLayout;
    myWidget->setLayout(mainLayout);
}

现在调用函数并显示小部件:

initializeMyWidget();
myWidget->show();

【讨论】:

    【解决方案2】:

    你应该像这样创建一个 Qframe 类 .h

    class Window : public QWidget
    {
        Q_OBJECT
    public:
        Window(QWidget *parent = nullptr);
    private:
        QLabel *createLabel(const QString &text);
    };
    #endif
    

    和.cpp

    #endif
        QGridLayout *layout = new QGridLayout;
        layout->addWidget(createLabel(tr("LEVEL")), 2, 0);
        setLayout(layout);
        setWindowTitle(tr("Tetrix"));
        resize(50, 370);
    }
    
    QLabel *Window::createLabel(const QString &text)
    {
        QLabel *label = new QLabel(text);
        label->setAlignment(Qt::AlignHCenter | Qt::AlignCenter);
        return label;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 1970-01-01
      • 2020-10-14
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多