2016-08-20 4 views
-2

Я абсолютный новичок как на Qt, так и на C++, поэтому, пожалуйста, простите меня.Преобразование существующего набора QPushButtons в один массив

Я пишу приложение для настольных календарей. У меня есть 42 кнопки для отображения чисел дня, которые при нажатии будут помещены в поле редактирования для добавления заметки. Эти кнопки уже сделаны и установлены. Все они работают, но я хотел бы сделать их в одном массиве для простоты кодирования. Кто-нибудь может предложить, как я могу это сделать? Я искал документацию, но я этого не понимаю.

Заранее благодарим за снисхождение.

+0

Вы положили кнопки в свои позиции вручную в редакторе формы Творца? – Sergey

+0

Я бы сказал, что использование [QVector] (http://doc.qt.io/qt-4.8/qvector.html) должно помочь вам, и вы можете '.append()' каждую кнопку в него, и получить доступ, используя '.at' и' .оператор [] 'оператор и функции-члены для каждого элемента. –

ответ

0

Используйте QVector так:

QVector<QPushButton*> btns; 
btns.append(oldbuttonname); 

Я рекомендую прокручивать все кнопки вместо того, чтобы вручную ставить их один за другим. Я имею в виду избавление от предыдущих кнопок, которые у вас были, и создание неименованных объектов в QVector. Вот пример:

QVector<QPushButton*> btns(42); 
for (int i=0;i<btns.size();i++) 
{ 
    btns[i] = new QPushButton(/*constructor args*/); 
} 
//Access like this 
btns[0]->member_name(); 
+0

Отлично. Большое спасибо. Да, кнопки были введены вручную с дизайнером Qt. Я уверен, что смогу сортировать его сейчас. Еще раз спасибо. – Hooder

+0

Пожалуйста, найдите момент, чтобы отметить этот ответ правильно, щелкнув значок галочки слева, чтобы другие могли видеть, что это было правильно. При щелчке значок станет зеленым. –

+0

@ArnavBorborah, используйте конструкцию QVector с размером и добавьте назначаемые элементы оператором '[] или просто создайте пустой контейнер, а затем используйте' .append() '. Вы не хотите иметь 84 элемента в своем векторе, не так ли? – 5208760

0

Вы можете создать массив или любой другой контейнер (например, QVector) виджетов (указатели на виджеты), чтобы собрать все их в одном месте. Вы можете как создать новый объект или назначить уже существующие, а именно:

QVector<QPushButton*> buttons; 
buttons.append(new QPushButton()); 

В конце концов для уже существующих кнопок:

QVector<QPushButton*> buttons; 
buttons.append(ui->pushButton); 
buttons.append(ui->pushButton_2); 
//etc.. 

Тогда вы можете просто открыть их как типичные элементы массива:

buttons[0]->height = 50; 
buttons[1]->setVisible(false); 
Смежные вопросы