2017-04-13 46 views
0
製作的指針爲QPushButton

我正在QPushButtons (image) 的aAxB電網和存儲他們的名字到QStringList中 像這樣從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

如果我理解你的問題,你需要一個關聯數組(鍵:值,鍵1:值...),當「鍵」是按鈕的名稱和值是對象按鈕。

在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」的示例調用。

0

您能否指定問題所在?在編譯器寫入時,由於錯誤,不可能將QPushButton形成爲QString等等。你不能理解什麼是錯的或什麼?我很抱歉,沒有足夠的人在評論中寫下它。將其刪除後,或給出完整的答案。

+0

我有一個字符串列表與對象名稱,我想從列表中取出對象名稱並閱讀它的幾何圖形,以確定它是否通過條件(在幾何中不同y) – bouchakx