- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是我的类主窗口:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
menu* v = new menu(this);
setCentralWidget(v);
}
还有我的菜单类:
menu::menu(MainWindow* parent){
QLabel l = new QLabel("123");
QVBoxLayout* lay = new QVBoxLayout;
lay->addWidget(l);
this->setLayout(lay);
QWidget* a = new QWidget;
QVBoxLayout* lay2 = new QVBoxLayout;
QLabel* ll = new QLabel("456");
lay2->addWidget(ll);
a->setLayout(lay2);
parent->setCentralWidget(a);
}
当我运行程序时,窗口显示 123,但我希望它显示 456。
setCentralWidget
方法是否不起作用?
最佳答案
setCentralWidget
工作正常。您将小部件 menu
构造与其在外部小部件 (MainWindow
) 中的位置混淆了。你应该把这些东西分开,否则你将无法,例如,在其他小部件中使用 menu
。
因此,您应该在构造函数中设置menu
的外观,并且只在MainWindow
中调用setCentralWidget
。
它应该是这样的:
文件.h
menu::menu(QWidget* parent = 0);
文件.cpp
menu::menu(QWidget* parent) : QWidget(parent)
{
// Create items
QLabel* l = new QLabel("123", this);
QLabel* ll = new QLabel("456", this);
// Put items in layout
QVBoxLayout* lay = new QVBoxLayout();
lay->addWidget(l);
lay->addWidget(ll);
// Set "lay" as the layout of this widget
setLayout(lay);
}
更新
因为想要的行为是有一个根据按钮点击切换 View 的界面:
最好的选择是使用 QStackedWidget 。
此处的示例代码将使用 QStackedWidget
生成此界面。
小部件1.h
#ifndef WIDGET1
#define WIDGET1
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
class Widget1 : public QWidget
{
Q_OBJECT
public:
Widget1(QWidget* parent = 0) : QWidget(parent) {
QPushButton* btn = new QPushButton("Button Widget 1", this);
QVBoxLayout* layout = new QVBoxLayout();
layout->addWidget(btn);
setLayout(layout);
connect(btn, SIGNAL(clicked()), SIGNAL(buttonClicked()));
}
signals:
void buttonClicked();
};
#endif // WIDGET1
小部件2.h
#ifndef WIDGET2
#define WIDGET2
#include <QWidget>
#include <QPushButton>
#include <QVBoxLayout>
class Widget2 : public QWidget
{
Q_OBJECT
public:
Widget2(QWidget* parent = 0) : QWidget(parent) {
QPushButton* btn1 = new QPushButton("Button 1 Widget 2", this);
QPushButton* btn2 = new QPushButton("Button 2 Widget 2", this);
QVBoxLayout* layout = new QVBoxLayout();
layout->addWidget(btn1);
layout->addWidget(btn2);
setLayout(layout);
connect(btn2, SIGNAL(clicked()), SIGNAL(button2Clicked()));
}
signals:
void button1Clicked();
void button2Clicked();
};
#endif // WIDGET2
主窗口.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QStackedWidget>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
public slots:
void buttonWidget1Clicked();
void button2Widget2Clicked();
private:
QStackedWidget* m_sw;
};
#endif // MAINWINDOW_H
主窗口.cpp
#include "mainwindow.h"
#include <QVBoxLayout>
#include <QLabel>
#include "widget1.h"
#include "widget2.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
// Create Widgets
Widget1* w1 = new Widget1(this);
Widget2* w2 = new Widget2(this);
QLabel* w3 = new QLabel("Result", this);
m_sw = new QStackedWidget(this);
m_sw->addWidget(w1);
m_sw->addWidget(w2);
m_sw->addWidget(w3);
setCentralWidget(m_sw);
connect(w1, SIGNAL(buttonClicked()), this, SLOT(buttonWidget1Clicked()));
connect(w2, SIGNAL(button2Clicked()), this, SLOT(button2Widget2Clicked()));
}
void MainWindow::buttonWidget1Clicked()
{
m_sw->setCurrentIndex(1); // Will show Widget2
}
void MainWindow::button2Widget2Clicked()
{
m_sw->setCurrentIndex(2); // Will show Widgee3
}
MainWindow::~MainWindow() {}
关于c++ - 为什么 setCentralWidget 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31501462/
我有不同的文件(main.py和layout.py),我想从文件layout.py更改QMainWindow的窗口(我已经缩短了它应该更改窗口大小的示例)。 它在 main.py 中工作正常,我可以从
这是我的类主窗口: MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { menu* v = new menu
对于编程类项目,我们需要开发一个应用程序,并且必须使用 PYQT5 作为 GUI。 我有一个基于 QMainWindow 的类。有几行代码我不太明白。下面是初始化: # Snippet 1 class
//clposter.h class CLPoster : public QMainWindow { Q_OBJECT public: CLPoster(); private slot
不确定我问这个问题是否正确,因为我是 C++ 和 Qt 的新手。但是,假设我有一个 QWidget 的子类: class childofqwidget : public QWidget 我可以将指向子
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { this->se
我正在尝试使用 QT Designer 创建 GUI。我已使用以下教程将我的 .ui 设计器文件转换为 .py 文件:http://pyqt.sourceforge.net/Docs/PyQt5/de
我仍在为我的数据库开发 GUI,现在我有一个不同的错误: Traceback (most recent call last): File "G:\Python\Database Kast Thui
我是一名优秀的程序员,十分优秀!