我正在制作一个QPushButtons的AxB网格 (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());
^
^
答案 0 :(得分:0)
请说明问题是什么?正如编译器所写的那样,由于错误,不可能使QPushButton
形成QString
等等。你不能理解什么是错的或什么?对不起,没有足够的raiting在评论中写下来。将在之后删除,或给出完整答案。
答案 1 :(得分:0)
如果我理解你的问题,你需要一个关联数组(key:value,key1:value ...),当“key”是按钮名称而value是对象按钮时。
在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”的示例。