我一直在从视频教程here学习qt。 我已经完成了35个视频。所以我想创建一个示例应用程序只是为了理解qt。 我正在使用最新版本的qt creator。
我添加了一些按钮&删除菜单栏&主窗口中的工具栏。
运行后我发现,如果我调整窗口大小,则不会出现滚动条。
我不希望按钮调整大小或移动。我很好,他们变得不可见,但我想要滚动条,以便用户可以滚动到不可见的部分。 我添加了一个滚动区域小部件,但它不起作用。我通过在互联网上搜索做了一些编码,但这也没有用。当我将滚动区域的大小增加到窗口大小;运行窗口后显示为空白。也许按钮位于滚动区域的“下方”。如何更改哪个对象应该在“顶部”?
因为我只是一个初学者,我不知道什么是使用qt设计的最佳方法。我应该使用设计师和放大器来放置所需的小部件吗?然后通过编码给出他们的特征?或者我应该使用设计师完成设计?或者我应该放弃设计师和做完整的编码? 谢谢!
修改 @Synxis, 这没什么帮助。我甚至使用了secentralwidget(ui-> scrollareacontentswidget); 我尝试删除centralwidget QWidget,但我不能。 任何解决方案?
答案 0 :(得分:3)
QWidget没有滚动条,您需要添加一个包含滚动条的区域。
只需在窗口中添加QScrollArea,然后将所有小部件放入其中(按钮等等)。不要忘记将滚动区域布局到整个主窗口。
更确切地说,层次结构是这样的:
main window central widget (with a layout)
scroll area
scroll area widget (with a layout, layout scroll area if you're in the designer)
your container widget (should be layouted also)
your buttons, layouts, etc...
((with a layout)
=使用布局布局窗口小部件,但布局类型无关紧要,因为只需要布置一个窗口小部件。)
您的容器小部件应该根据需要进行布局,间隔器可能很有用。
答案 1 :(得分:0)
让QHBoxLayout成为一个简单的QWidget()对象,然后将该widget对象设置为滚动区域的小部件调用setWidget()。这些都是实际需要的。或者至少有时你需要调用setWidgetResizable(bool),如果可以使用额外的空间。示例代码如下。
#include <QtGui>
class YourWidget : public QWidget
{
public:
YourWidget(QWidget* parent=0)
: QWidget(parent)
{
QHBoxLayout* buttonLay = new QHBoxLayout;
for (int i=0; i<10; ++i) {
QPushButton* button = new QPushButton(tr("Button%1").arg(i));
buttonLay->addWidget(button);
}
QLabel* dummyBigLabel = new QLabel(tr("DummyBigLabel"));
dummyBigLabel->setAlignment(Qt::AlignCenter);
dummyBigLabel->setMinimumSize(400,300);
dummyBigLabel->setFrameStyle(QFrame::Panel | QFrame::Sunken);
QVBoxLayout* mainLay = new QVBoxLayout(this);
mainLay->addLayout(buttonLay);
mainLay->addWidget(dummyBigLabel);
}
};
int main(int argc, char** argv)
{
QApplication app(argc, argv);
QWidget* topLevelWidget = 0;
YourWidget* editor = new YourWidget;
#ifdef USE_NO_SCROLL_AREA
topLevelWidget = editor;
#else
QScrollArea* scroller = new QScrollArea;
scroller->setWidget(editor);
topLevelWidget = scroller;
#endif
topLevelWidget->show();
topLevelWidget->raise();
return app.exec();
}