我一直在努力解决以下问题。我有一个放置在滚动区域中的工具按钮列表。我想使用复制工具按钮文本的按钮创建第二个滚动区域,但仅适用于选定的工具按钮。例如,让我们选择工具按钮 1,2 和 3。然后当我按下“更新”按钮时,应该会出现一个带有按钮 1,2 和 3 的滚动区域。这是我的代码:
CPP 文件:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
scrollArea.setParent(ui->centralWidget);
scrollArea.setGeometry(50,50,200,300);
scrollArea.setWidget(&viewport);
viewport.setLayout(&layout);
scrollArea2.setParent(ui->centralWidget);
scrollArea2.setGeometry(350,50,200,300);
scrollArea2.setWidget(&viewport2);
viewport2.setLayout(&layout2);
update.setParent(ui->centralWidget);
update.setGeometry(50,400,100,50);
update.setText("update");
addButtons();
connect(&update,SIGNAL(clicked()),this,SLOT(refreshScrollArea()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::addButtons()
{
for(int i=0; i<5;i++)
{
QToolButton *button = new QToolButton;
button->setCheckable(true);
buttons<<button;
buttons[i]->setText(QString::number(i+1));
buttons[i]->setMinimumSize(200,50);
layout.addWidget(buttons[i]);
}
viewport.resize(200,5*50);
}
void MainWindow::refreshScrollArea()
{
while (!layout2.isEmpty())
{
delete layout2.takeAt(0);
}
int selected_index=0;
for(int i=0; i<5;i++)
{
if (buttons[i]->isChecked())
{
QPushButton * button = new QPushButton;
button->setText(buttons[i]->text());
layout2.addWidget(button);
selected_index++;
}
}
viewport2.resize(150,50*selected_index);
}
头文件:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtGui>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void addButtons();
void refreshScrollArea();
private:
Ui::MainWindow *ui;
QVector<QToolButton*> buttons;
QScrollArea scrollArea;
QScrollArea scrollArea2;
QVBoxLayout layout;
QVBoxLayout layout2;
QWidget viewport;
QWidget viewport2;
QPushButton update;
};
#endif // MAINWINDOW_H
主要的:
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
当我按下更新按钮一次时,它工作得很好,但是当我选择不同的工具按钮并再次按下更新时,按钮似乎被堆叠起来,好像布局不是空的。但是,当我选择 no toolbutton 并推送更新时,没有按钮,因此布局被清空。谁能看到我做错了什么?