使用QTabWidget在Qt中创建选项卡
Creating tabs in Qt using QTabWidget
他们告诉我们如何创建制表符:
- 创建
QTabWidget
。 的每个页面创建一个 - 插入孩子小部件放入页面小部件,使用布局将它们定位为正常的。
- 呼叫
addTab()
或insertTab()
,将页面小部件放入选项卡小部件,为每个选项卡提供一个合适的标签键盘快捷方式。
QWidget
选项卡对话框,但不要为它们指定父部件。class mainWindow : public QDialog
{
Q_OBJECT
QWidget* m_mainWindow;
QTabWidget* tab;
...
然后我有一个Widget类,定义了一个"页":
class tradeView : public QWidget
{
Q_OBJECT
QWidget* tradeWidget;
...
小部件(应该作为页面进入选项卡)的c'tor是这样的:
tradeView::tradeView()
{
tradeWidget = new QWidget;
tradeWidget->setWindowTitle("Trade View");
tradeWidget->setGeometry(150,18,1800,800);
m_pTableWidget = new QTableWidget(this);
m_pTableWidget->setRowCount(100);
m_pTableWidget->setColumnCount(6);
m_TableHeader<<"Client Id"<<"Symbol"<<"Quantity"<<"Strategy Id"<<"Expiry" << "Side";
m_pTableWidget->setHorizontalHeaderLabels(m_TableHeader);
m_pTableWidget->verticalHeader()->setVisible(false);
m_pTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
m_pTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
m_pTableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
m_pTableWidget->setShowGrid(false);
m_pTableWidget->setStyleSheet("QTableView {selection-background-color: red;}");
m_pTableWidget->setGeometry(QApplication::desktop()->screenGeometry());
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(m_pTableWidget);
tradeWidget->setLayout(layout);
}
然后我在主对话框c'tor中做了以下操作:
mainWindow::mainWindow(QWidget* parent):QDialog(parent)
{
m_mainWindow = new QWidget;
m_mainWindow->setWindowTitle("Main Window");
QVBoxLayout *layout = new QVBoxLayout;
tradeView* tradeViewWindow = new tradeView();
orderView* orderViewWindow = new orderView();
tab = new QTabWidget(this);
tab->addTab(tradeViewWindow, "Trade");
tab->addTab(orderViewWindow, "Order");
layout->addWidget(tab);
m_mainWindow->setLayout(layout);
m_mainWindow->setGeometry(150,18,1850,900);
m_mainWindow->show();
}
我希望小部件显示在选项卡中。但是当我运行代码时,创建了选项卡,但它是完全空的。
我在这里错过了什么?
您的小部件结构很奇怪。您的小部件的粗略对象所有权如下所示:
MainWindow (top-level QDialog)
m_mainWindow (top-level QWidget)
tab (QTabWidget)
tradeViewWindow (QWidget)
orderViewWindow (QWidget)
tradeView->tradeWidget (hidden top-level QWidget)
QTableWidget
orderView->orderWidget (hidden top-level QWidget)
QTableWidget
你现在看到问题了吗?你实际上有4个顶级QWidgets,其中两个是隐藏的。您看到的是空选项卡,因为您在另一个隐藏的QWidget中创建了QTableWidget。换句话说,QTableWidget的父类不是选项卡,它的父类是一个隐藏的顶级QWidget。
解决方案:tradeView本身已经是一个QWidget,没有必要在其中再次创建另一个tradeWidget。你应该将布局的父元素设置为tradeView本身:
tradeView::tradeView()
{
//tradeWidget = new QWidget; // this is a hidden top-level QWidget
//tradeWidget->setWindowTitle("Trade View");
//tradeWidget->setGeometry(150,18,1800,800);
m_pTableWidget = new QTableWidget(this);
m_pTableWidget->setRowCount(100);
m_pTableWidget->setColumnCount(6);
m_TableHeader<<"Client Id"<<"Symbol"<<"Quantity"<<"Strategy Id"<<"Expiry" << "Side";
m_pTableWidget->setHorizontalHeaderLabels(m_TableHeader);
m_pTableWidget->verticalHeader()->setVisible(false);
m_pTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
m_pTableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
m_pTableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
m_pTableWidget->setShowGrid(false);
m_pTableWidget->setStyleSheet("QTableView {selection-background-color: red;}");
m_pTableWidget->setGeometry(QApplication::desktop()->screenGeometry());
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(m_pTableWidget);
//tradeWidget->setLayout(layout);
this->setLayout(layout);
}
作为旁注,你的主窗口是一个QDialog创建另一个m_mainWindow,以及,你确定这是你的意图?
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- Winapi创建选项卡菜单
- Android :需要在 c++ NDK 中创建共享首选项对象并存储一些布尔值
- D3D9创建设备,在Alt选项卡后获得vtable黑屏
- 为不明确的重载创建首选项
- 如何创建一个程序来替换单个空白/选项卡的多个空白/选项卡
- 在Qt中创建序列选项卡
- 使用动态创建的选项卡元素在C 和QML之间绑定
- GTK+ / Gtkmm,检查笔记本选项卡是否已存在,仅在不存在时才创建它
- 如何使用 C# 创建 Nuget 包,以及如何使用不同选项生成的C++库
- 在同一优先级队列中创建递增和递减顺序选项
- osX :运行循环选项(创建事件点击时)
- GNU MAKE - 从我自己的 Makefile 创建 getoptpp 库或建议 c++ 的命令行选项库
- 以编程方式在新选项卡内创建新的QTextEdit
- 如何创建桌面图标/按钮来启动用户Windows屏幕保护程序,并设置选项
- 创建静默CLI选项的最佳做法
- 创建一个实现选项卡并可用作 QMainWindow 中的"central widget"的类
- 使用QTabWidget在Qt中创建选项卡
- 选项来显示从模板创建的类
- 使用 /Command 选项从命令行为 Visual Studio C++ 项目创建一个新文件