Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.129.19.251] |
|
Сообщ.
#1
,
|
|
|
Вот код:
#include<QtGui> class QTableWidget2 : public QTableWidget { public: void clear(QTableWidget &, QTableWidgetItem &); }; void QTableWidget2::clear(QTableWidget &table, QTableWidgetItem &item) { item.setText("0"); for(int i=0; i<3; i++) for(int j=0; j<3; j++) table.setItem(i, j, &item); } int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget wgt; wgt.setWindowTitle("Determinant Calculator"); wgt.resize(400, 250); QTableWidget table(3, 3); QTableWidgetItem item; item.setText("0"); QTableWidget2 tw; tw.clear(table, item); //table.setCellWidget(0, 1, &lbl); QVBoxLayout vbox; QHBoxLayout hbox1, hbox2; QPushButton btn1("&Calculate"); QPushButton btn2("&Generate"); QPushButton btn3("&Clear"); QPushButton btn4("&Exit"); hbox1.addWidget(&btn1); hbox1.addWidget(&btn2); hbox1.addWidget(&btn3); hbox1.addWidget(&btn4); QLabel lbl1("Determinant = "); QLabel lbl2("0"); hbox2.addWidget(&lbl1); hbox2.addWidget(&lbl2); vbox.addWidget(&table); vbox.addLayout(&hbox1); vbox.addLayout(&hbox2); wgt.setLayout(&vbox); QObject::connect(&btn4, SIGNAL(clicked()), &app, SLOT(quit())); wgt.show(); return app.exec(); } При изменении значения одной из ячеек таблицы - значения других ячеек также заменяются на вновь введенное. Почему? P.S.: Набросал такую же форму в QtDesigner-е и собрал (дополнив таким же кодом) в QDevelop-ере - там все нормально! |
Сообщ.
#2
,
|
|
|
Цитата SectoRz @ void QTableWidget2::clear(QTableWidget &table, QTableWidgetItem &item) { item.setText("0"); for(int i=0; i<3; i++) for(int j=0; j<3; j++) table.setItem(i, j, &item); } Очень неосмотрительно... Тебе повезло, что item из main живёт до конца программы... void QTableWidget2::clear(QTableWidget &table, QTableWidgetItem &item) { item.setText("0"); for(int i=0; i<3; i++) for(int j=0; j<3; j++) { QTableWidgetItem *newItem = new QTableWidgetItem(item); table.setItem(i, j, newItem); } } Ошибку свою понимаешь или объяснить? |
Сообщ.
#3
,
|
|
|
Было бы неплохо и объяснить!
И еще, смотри сюда: #include<QtGui> class QTableWidget2 : public QTableWidget { //Q_OBJECT public /*slots*/: void clear(QTableWidget &, QTableWidgetItem &); }; void QTableWidget2::clear(QTableWidget &table, QTableWidgetItem &item) { item.setText("0"); for(int i=0; i<3; i++) for(int j=0; j<3; j++) { QTableWidgetItem *newItem = new QTableWidgetItem(item); table.setItem(i, j, newItem); } } int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget wgt; wgt.setWindowTitle("Determinant Calculator"); wgt.resize(400, 250); QTableWidget table(3, 3); QTableWidgetItem item, item1, item2, item3, item4, item5, item6, item7, item8, item9; // Проинициализируем массив нулями: QTableWidget2 tw; tw.clear(table, item); // Проинициализируем массив еще чем нибудь: item1.setText("3"); table.setItem(0, 0, &item1); item2.setText("2"); table.setItem(0, 1, &item2); item3.setText("1"); table.setItem(0, 2, &item3); item4.setText("4"); table.setItem(1, 0, &item4); item5.setText("5"); table.setItem(1, 1, &item5); item6.setText("1"); table.setItem(1, 2, &item6); item7.setText("2"); table.setItem(2, 0, &item7); item8.setText("3"); table.setItem(2, 1, &item8); item9.setText("8"); table.setItem(2, 2, &item9); //table.setCellWidget(0, 1, &lbl); QVBoxLayout vbox; QHBoxLayout hbox1, hbox2; QPushButton btn1("&Calculate"); QPushButton btn2("&Generate"); QPushButton btn3("&Clear"); QPushButton btn4("&Exit"); hbox1.addWidget(&btn1); hbox1.addWidget(&btn2); hbox1.addWidget(&btn3); hbox1.addWidget(&btn4); QLabel lbl1("Determinant = "); QLabel lbl2("0"); hbox2.addWidget(&lbl1); hbox2.addWidget(&lbl2); vbox.addWidget(&table); vbox.addLayout(&hbox1); vbox.addLayout(&hbox2); wgt.setLayout(&vbox); //QObject::connect(&btn3, SIGNAL(clicked()), &table, SLOT(clear(&table, &item))); QObject::connect(&btn4, SIGNAL(clicked()), &app, SLOT(quit())); wgt.show(); return app.exec(); } Как избавится от этого: QTableWidgetItem item, item1, item2, item3, item4, item5, item6, item7, item8, item9; Ведь, если я буду использовать один объект item для установления значения в разные ячейки таблицы, то в итоге во всех ячейках опять окажется одно и то же значение (в данном случае во всех ячеках будет 8 - я проверял). Непорядок получается - а вдруг у меня 1000 на 1000 таблица, что мне для каждой ячейки свой item создавать? |
Сообщ.
#4
,
|
|
|
Цитата SectoRz @ Было бы неплохо и объяснить! Да чёрт его знает как тебе объяснить это... Ну, допустим такой пример: QLabel lbl; lbl.setText("1"); hbox1.addWidget(&lbl); lbl.setText("2"); hbox2.addWidget(&lbl); // допустим hbox1 и hbox2 лежат на widget'е с вертикальным layout'ом. Тебе понятна ошибка в этом примере? Понятно почему результат будет именно таким? Цитата SectoRz @ Как избавится от этого: const char *values[3][3] = { { "1", "2", "3" }, { "4", "5", "6" }, { "7", "8", "9" } }; for (int i = 0; i < 3; ++i) for (int j = 0; j < 3; ++j) { QTableWidgetItem *item = new QTableWidgetItem(); item->setText(values[i][j]); table.setItem(i, j, item); } Цитата SectoRz @ Непорядок получается - а вдруг у меня 1000 на 1000 таблица, что мне для каждой ячейки свой item создавать? В голове у тебя непорядок... А с таблицей 1000 на 1000 ты тоже будешь руками значения вбивать? |
Сообщ.
#5
,
|
|
|
Цитата archimed7592 @ так я про тож... Нужно рандомом заполнить - надеюсь QRandom какой нибудь есть?!))) В голове у тебя непорядок... А с таблицей 1000 на 1000 ты тоже будешь руками значения вбивать? Добавлено За пример спасибо - сразу стало ясно в чем был предыдущий баг. |
Сообщ.
#6
,
|
|
|
Цитата SectoRz @ так я про тож... Ты не про тож... Я пытался донести до тебя мысли о том, что данные не харкодят, а хранят отдельно(в файле, в БД, в реестре и т.д.) Цитата SectoRz @ надеюсь QRandom какой нибудь есть?! Ты вместо того, чтобы надеятся, запусти assistant и напиши там rand. |
Сообщ.
#7
,
|
|
|
Цитата archimed7592 @ да юзаю я ассистент! Ты вместо того, чтобы надеятся, запусти assistant и напиши там rand. |
Сообщ.
#8
,
|
|
|
Цитата SectoRz @ да юзаю я ассистент! А... так это риторический вопрос был? Что ж... Все последующие вопросы тоже считать риторическими? |
Сообщ.
#9
,
|
|
|
Мог бы и по смайлику догадаться.
Ладно, а то уже флейм пошел - вопрос решен. Тебе инкрементирую + ! |
Сообщ.
#10
,
|
|
|
Ребята, а у меня такая проблема возникла.
Так вот в Qt Designer можно создавать таблицы 200000 x 10. А вот функции доступа и управления элементами таблицы имеют блин формат (int,int) то есть максимум что можно прочитать это элемент 128 столбика 128 ряда. Вопрос: как работать с остальными элементами таблицы? |
Сообщ.
#11
,
|
|
|
Цитата MicroHard @ то есть максимум что можно прочитать это элемент 128 столбика 128 ряда. OMG 0_o. int имеет диапазон значений, зависящий от платформы, но в твоём случае это почти гарантировано -2147483648..2147483647. 2-х миллиардов хватит? |
Сообщ.
#12
,
|
|
|
Иными словами то, что в MS Visual C++ называется (DWORD,DWORD) Qt Assistant называет (int,int). Я вас правильно понял?
|
Сообщ.
#13
,
|
|
|
.
Иными словами то, что в С++ называется int - в Win32API называется DWORD. |
Сообщ.
#14
,
|
|
|
Да ладно вы над ламером ржать, DWORD- это вообще-то unsigned int!
Спасибо за ответ. |