自定义 Qt 小部件
Posted
技术标签:
【中文标题】自定义 Qt 小部件【英文标题】:Custom Qt Widget 【发布时间】:2012-08-06 00:24:39 【问题描述】:如何创建一个包含名字、中间名和姓氏字段的简单小部件并将其添加到主窗口类?
我问是因为我不知道为什么下面这个简单的小部件尝试不起作用,我错过了什么?
主要
int main(int argc, char *argv[])
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
主窗口类
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
QMainWindow *mainView = new QMainWindow;
setCentralWidget(mainView);
CardUI *card = new CardUI;
QHBoxLayout *hCard = new QHBoxLayout;
hCard->addWidget(card);
mainView->setLayout(hCard);
mainView->show();
cardui类
CardUI::CardUI(QWidget *parent) : QWidget(parent)
QLineEdit *fnText = new QLineEdit;
QLineEdit *miText = new QLineEdit;
QLineEdit *lnText = new QLineEdit;
QHBoxLayout *name = new QHBoxLayout;
name->addWidget(fnText);
name->addWidget(miText);
name->addWidget(lnText);
setLayout(name);
【问题讨论】:
您的 MainWindow 构造函数看起来很奇怪。复制/粘贴问题? 【参考方案1】:QMainWindow *mainView = new QMainWindow;
//....
mainView->setLayout(hCard);
您不应该更改QMainWindow
的布局。使用setCentralWidget
或使用给定的 API 添加工具栏/停靠栏。
在这种特殊情况下,您不应将mainView
创建为QMainWindow
(您不能在一个 应用程序中拥有两个主 窗口,对吧?)。您可以将mainView
类型更改为QWidget
,但您甚至可以不创建任何代理小部件,而只需
MainWindow::MainWindow(QWidget *parent); : QMainWindow(parent)
card = new CardUI;
setCentralWidget(card);
【讨论】:
您可以在应用程序中拥有两个(或更多)QMainWindows
,事实上,在 Qt 中,这是在子小部件中“嵌套”工具栏/停靠小部件的唯一方法。但在你的主要观点上,我认为你是对的,这绝对是 OP 在主窗口构造函数中所做的代码气味。
@cbamber85,我正在考虑从语义的角度来看不可能有 2 个主窗口。在这种情况下,代码应该遵循语义)以上是关于自定义 Qt 小部件的主要内容,如果未能解决你的问题,请参考以下文章