从 QStringList 为 QPushButton 创建一个指针
Making a pointer for a QPushButton from QStringList
我正在制作 QPushButtons 的 aAxB 网格
(image)
并将他们所有的名字存储到 QStringList
像这样
QString Enemy_name = "Enemy_n"+QString::number(counter);
counter++;
QPushButton *Enemy_ship =new QPushButton(ui->Enemy);
Enemy_ship->setObjectName(Enemy_name);
Enemy_ship->setGeometry(15*b,15*i,10,10);
Enemy_ship->setVisible(true);
Enemy_name += "G";
Enemy_names += Enemy_name;
}
}
Enemy_list = Enemy_names.split("G");
此处正在使用列表中的存储值
我在哪里遇到一些转换错误
这是代码
void MainWindow::lastrow(){
int n=0;
QString firstinrow = Enemy_list[0]; //Getting QPushButton Objectname from the list
QPushButton *b = firstinrow; //Making pointer *b for the object name
QString temp; //Same but temporary
QPushButton *btemp; //...
do{
n++; //Counter for list position
temp = &Enemy_list[n]; //Getting object name from position n in the list
*btemp = temp; //temp button pointer
}while(!ui->*b->geometry.y() == ui->*btemp->geometry.y()); //checking Y of those 2 for not same Y
// QString lastinrow = &Enemy_list[n-1];
}
错误
E:\QT\Try\mainwindow.cpp:81: Chyba: cannot convert 'QString' to 'QPushButton*' in initialization
QPushButton *b = firstincol;
^
E:\QT\Try\mainwindow.cpp:86: Chyba: invalid conversion from 'QString*' to 'char' [-fpermissive]
temp = &Enemy_list[n];
^
E:\QT\Try\mainwindow.cpp:87: Chyba: no match for 'operator=' (operand types are 'QPushButton' and 'QString')
*btemp = temp;
^
E:\QT\Try\mainwindow.cpp:88: Chyba: 'b->QWidget::geometry' does not have class type
}while(!ui->*b->geometry.y() == ui->*btemp->geometry.y());
E:\QT\Try\mainwindow.cpp:88: Chyba: 'btemp->QWidget::geometry' does not have class type
}while(!ui->*b->geometry.y() == ui->*btemp->geometry.y());
^
^
能否请您具体说明是什么问题?正如编译器所写的那样,由于错误,不可能使 QPushButton
形成 QString
等等。你无法理解哪里出了问题或什么?很抱歉,没有足够的评分将其写在评论中。之后会删除,或者给出完整答案。
如果我理解你的问题,你需要一个关联数组(键:值,key1:value ...),当 "key" 是按钮的名称并且值是对象按钮时。
在Qt中,QMap就是用来做这个的。
下面是如何使用它的简单演示。
文件mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
#include <QMap>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void whoIam();
private:
Ui::MainWindow *ui;
QMap<QString, QPushButton *> list;
};
#endif // MAINWINDOW_H
文件mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
for(int i = 0; i < 10; i++){
QPushButton *button = new QPushButton(this);
button->setGeometry(i*70,20,60,40);
button->setObjectName("key_"+QString::number(i));
button->setText(button->objectName());
connect(button,SIGNAL(clicked(bool)),this,SLOT(whoIam()));
list.insert(button->objectName(),button);
}
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::whoIam()
{
QPushButton *button = dynamic_cast<QPushButton *>(sender());
QString message = QString("Hi, I am a QPushButton %1\nI am at x: %2, y: %3.")
.arg(button->objectName())
.arg(button->geometry().x())
.arg(button->geometry().y());
QMessageBox::information(this,"Information",message);
button = dynamic_cast<QPushButton *>(list["key_1"]);
message = QString("Hi, I am a QPushButton %1\nI am at x: %2, y: %3.")
.arg(button->objectName())
.arg(button->geometry().x())
.arg(button->geometry().y());
QMessageBox::information(this,"Information",message);
}
在构造函数中我创建了 10 个按钮,设置他的参数,将单击的操作连接到我的函数(专用插槽:whoIam())并将按钮插入列表。
在 whoIam() 中,我使用 dynamic_cast 来转换 QPushButton。第一次,获取有关触发事件的对象的信息,第二次,作为对列表中关键变量 "key_1" 的示例调用。
我正在制作 QPushButtons 的 aAxB 网格 (image) 并将他们所有的名字存储到 QStringList 像这样
QString Enemy_name = "Enemy_n"+QString::number(counter);
counter++;
QPushButton *Enemy_ship =new QPushButton(ui->Enemy);
Enemy_ship->setObjectName(Enemy_name);
Enemy_ship->setGeometry(15*b,15*i,10,10);
Enemy_ship->setVisible(true);
Enemy_name += "G";
Enemy_names += Enemy_name;
}
}
Enemy_list = Enemy_names.split("G");
此处正在使用列表中的存储值 我在哪里遇到一些转换错误 这是代码
void MainWindow::lastrow(){
int n=0;
QString firstinrow = Enemy_list[0]; //Getting QPushButton Objectname from the list
QPushButton *b = firstinrow; //Making pointer *b for the object name
QString temp; //Same but temporary
QPushButton *btemp; //...
do{
n++; //Counter for list position
temp = &Enemy_list[n]; //Getting object name from position n in the list
*btemp = temp; //temp button pointer
}while(!ui->*b->geometry.y() == ui->*btemp->geometry.y()); //checking Y of those 2 for not same Y
// QString lastinrow = &Enemy_list[n-1];
}
错误
E:\QT\Try\mainwindow.cpp:81: Chyba: cannot convert 'QString' to 'QPushButton*' in initialization
QPushButton *b = firstincol;
^
E:\QT\Try\mainwindow.cpp:86: Chyba: invalid conversion from 'QString*' to 'char' [-fpermissive]
temp = &Enemy_list[n];
^
E:\QT\Try\mainwindow.cpp:87: Chyba: no match for 'operator=' (operand types are 'QPushButton' and 'QString')
*btemp = temp;
^
E:\QT\Try\mainwindow.cpp:88: Chyba: 'b->QWidget::geometry' does not have class type
}while(!ui->*b->geometry.y() == ui->*btemp->geometry.y());
E:\QT\Try\mainwindow.cpp:88: Chyba: 'btemp->QWidget::geometry' does not have class type
}while(!ui->*b->geometry.y() == ui->*btemp->geometry.y());
^
^
能否请您具体说明是什么问题?正如编译器所写的那样,由于错误,不可能使 QPushButton
形成 QString
等等。你无法理解哪里出了问题或什么?很抱歉,没有足够的评分将其写在评论中。之后会删除,或者给出完整答案。
如果我理解你的问题,你需要一个关联数组(键:值,key1:value ...),当 "key" 是按钮的名称并且值是对象按钮时。
在Qt中,QMap就是用来做这个的。
下面是如何使用它的简单演示。
文件mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPushButton>
#include <QMap>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void whoIam();
private:
Ui::MainWindow *ui;
QMap<QString, QPushButton *> list;
};
#endif // MAINWINDOW_H
文件mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
for(int i = 0; i < 10; i++){
QPushButton *button = new QPushButton(this);
button->setGeometry(i*70,20,60,40);
button->setObjectName("key_"+QString::number(i));
button->setText(button->objectName());
connect(button,SIGNAL(clicked(bool)),this,SLOT(whoIam()));
list.insert(button->objectName(),button);
}
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::whoIam()
{
QPushButton *button = dynamic_cast<QPushButton *>(sender());
QString message = QString("Hi, I am a QPushButton %1\nI am at x: %2, y: %3.")
.arg(button->objectName())
.arg(button->geometry().x())
.arg(button->geometry().y());
QMessageBox::information(this,"Information",message);
button = dynamic_cast<QPushButton *>(list["key_1"]);
message = QString("Hi, I am a QPushButton %1\nI am at x: %2, y: %3.")
.arg(button->objectName())
.arg(button->geometry().x())
.arg(button->geometry().y());
QMessageBox::information(this,"Information",message);
}
在构造函数中我创建了 10 个按钮,设置他的参数,将单击的操作连接到我的函数(专用插槽:whoIam())并将按钮插入列表。
在 whoIam() 中,我使用 dynamic_cast 来转换 QPushButton。第一次,获取有关触发事件的对象的信息,第二次,作为对列表中关键变量 "key_1" 的示例调用。