Qt:两个按钮在一个窗口,一个骰子在另一个窗口
Qt: Two buttons in one, a dice in another window
在Qt中,我正在编写一个"游戏",向您展示一个随机数字绘制的骰子。这其实很简单,但对我这个新手来说是相当大的任务。
到目前为止,我已经实现了以下小部件、函数等:1)一个按钮,指的是一个插槽,它在1到6之间随机选择一个值
2)关闭应用程序的按钮
3)一个画好的骰子(画家)。drawRoundedRect,画家。
我希望按钮1)和按钮2)显示在同一个窗口中,骰子3)显示在另一个窗口中。然而,现在这两个按钮在两个窗口中,骰子(正确地)显示在一个单独的窗口中(应该如此)。
如果我创建一个新的QGridLayout并添加按钮小部件,它会突然出现在骰子窗口中!我很困惑这到底是怎么回事。
dicewidget.cpp:
DiceWidget::DiceWidget(QWidget *parent) :
QWidget(parent)
{
QPushButton *rollDice = new QPushButton("Roll Dice!");
rollDice->show();
QPushButton *close = new QPushButton("Close app");
close->show();
connect( rollDice, SIGNAL(clicked()), this, SLOT(randomizer()) );
connect( close, SIGNAL(clicked()), this, SLOT(quit()) );
}
void DiceWidget::paintEvent (QPaintEvent *event)
{
setMinimumSize(150, 150-BORDER);
int diceSize = width() < height() ? width(): height();
diceSize -= 2 * BORDER + 1;
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(Qt::black);
painter.setBrush(Qt::white);
painter.drawRoundedRect( ( width() - diceSize ) / 2,
( height() - diceSize ) / 2,
diceSize, diceSize,
15, 15, Qt::RelativeSize);
painter.setBrush(Qt::black);
switch(value)
{
case 1:
// SHORTENED: draws the ellipse...
break;
case 2:
// draws one more ellipse... (and so on)
break;
// ... until value 6
case 6:
// draws six ellipses
break;
}
}
void DiceWidget::randomizer(void)
{
value = rand() % 6 + 1;
update();
}
我希望这不会让你太困惑,你可以了解我的概念。我找了很多,但我找不到一个适合我的应用程序的解决方案。
提前感谢!
您在骰子窗口中看到按钮1)的原因是因为您显然在DiceWidget的构造函数中创建了GridLayout并将其父级设置为this
(DiceWidget)。因此,你的骰子窗口得到gridLayout,当你将按钮添加到布局时,它将与你的骰子一起出现在同一个窗口中。
将以下内容添加到DiceWidget构造函数中:
DiceWidget::DiceWidget(QWidget *parent) : QWidget(parent)
{
QPushButton *rollDice = new QPushButton("Roll Dice!");
QPushButton *close = new QPushButton("Close app");
QWidget *buttonWindow = new QWidget;
QGridLayout *diceLayout = new QGridLayout(buttonWindow);
diceLayout->addWidget(rollDice, 0, 0, 1, 1);
diceLayout->addWIdget(close, 0, 1, 1, 1);
buttonWindow->show();
connect( rollDice, SIGNAL(clicked()), this, SLOT(randomizer()) );
connect( close, SIGNAL(clicked()), this, SLOT(quit()) );
}
相关文章:
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 如何将不同的可执行文件合并到一个窗口框架中进行编码?像浏览器一样
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 如何将一个窗口保留在另一个应用程序窗口的前面
- Qt:从另一个窗口访问公共对象
- 触发另一个窗口的菜单按钮
- 如何在Qt中管理另一个窗口?
- 我在窗口中有一个fltk Fl_Choice下拉菜单,但只能通过鼠标使用
- 在SFML(C++)中启动一个新窗口
- 将变量从主窗口传递到另一个qt c++窗体
- 如何仅在一个窗口中忽略注入的输入?
- Gtkmm - 关闭窗口然后显示另一个窗口的正确方法
- 尝试使用 CPP 在一个 Qt 窗口中显示多个 png 文件
- 在C++中,系统如何将这些对象中的每一个与执行程序的窗口相关联?
- 有没有办法拿一个opencv显示窗口并将其保存到GUI窗口?
- 当电子的窗口隐藏时如何激活另一个应用程序窗口
- 发送到另一个窗口的鼠标移动消息不执行任何操作
- 两个窗口-一个由线程随机输出修改
- 在创建窗口(..)之后,如何给窗口一个颜色
- X11应用程序的最佳实践—每个应用程序或每个窗口一个XOpenDisplay