Russian Qt Forum
Ноябрь 26, 2024, 06:35 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3 4 5   Вниз
  Печать  
Автор Тема: Вывод графики  (Прочитано 28002 раз)
Alexu007
Гость
« Ответ #15 : Май 14, 2013, 22:50 »

Я не поленился, посчитал. В ассистанте 24 страницы (у меня на экране ноутбука) иностранного текста про QTableWidget - нехило для простой таблицы со строчками и столбиками...

Просмотрел (правда бегло) все 24 стр помощи - так и не нашёл никакого метода, который бы помещал текст в ячейку, что-то вроде setText(QString, int row, int col). QString вообще только в 3-х местах обнаружил: заполнение горизонтальных заголовков, заполнение вертикальных заголовков, и поиск по таблице. Как заполнить саму таблицу?

У Шлее пример того, как "вручную" в ходе выполнения программы создать таблицу (а нафига мне создавать в ходе выполнения, я хочу, чтобы таблица была сразу при запуске программы), как внутри таблицы создать ячейки (оказывается, каждая ячейка не составная часть таблицы, а отдельный объект!, который нужно создавать с помощью new!), и при создании заполнить их неким значением. Стр. 213

Ни слова о том, как с этой таблицей работать, после того как она уже создана. Как поместить в неё в нужную ячейку строку. Как прочитать из неё строку при необходимости. Ну правда написал, что изображение можно туда поместить с помощью QTableWidgetItem::setIcon(). Пример конечно привести не счёл нужным...

Полезной информации (по крайней мере для моего случая) - почти ноль. Или я чего не понимаю?
« Последнее редактирование: Май 14, 2013, 23:15 от Alexu007 » Записан
thechicho
Гость
« Ответ #16 : Май 14, 2013, 23:13 »

QTableWidget

смотришь
Public Functions
Public Slots
Signals
читаешь
Detailed Description

Table widgets can be constructed with the required numbers of rows and columns:

     tableWidget = new QTableWidget(12, 3, this);
Alternatively, tables can be constructed without a given size and resized later:

     tableWidget = new QTableWidget(this);
     tableWidget->setRowCount(10);
     tableWidget->setColumnCount(5);

читаешь то, что нужно, а не все "24 страницы на экране твоего ноутбука"
Записан
Alexu007
Гость
« Ответ #17 : Май 14, 2013, 23:24 »


     tableWidget = new QTableWidget(12, 3, this);
Alternatively, tables can be constructed without a given size and resized later:

     tableWidget = new QTableWidget(this);
     tableWidget->setRowCount(10);
     tableWidget->setColumnCount(5);

читаешь то, что нужно, а не все "24 страницы на экране твоего ноутбука"
Это уже неактуально, я таблицу взял из готовых компонентов, она сразу на экране появляется - с нужным числом col и row, это в свойствах таблицы устанавливается. Как в неё информацию засовывать?

А если даже создавать в ходе выполнения, куда, в main чтоли эти строчки вписывать? Ну, чтобы сразу на форме появлялась при запуске прораммы? Я вообще в майн никогда ничего стараюсь не писать...
Записан
thechicho
Гость
« Ответ #18 : Май 14, 2013, 23:50 »

//Это уже неактуально, я таблицу взял из готовых компонентов, она сразу на экране появляется - с нужным числом col и row, это в свойствах таблицы устанавливается. Как в неё информацию засовывать?
QTableWidget
Public Functions
QTableWidgetItem * item ( int row, int column ) const

QTableWidgetItem
Public Functions
virtual void setData ( int role, const QVariant & value )
void setText ( const QString & text )

ui->tableWidget->item(1, 1)->setText("Alexu007 нубас");


//А если даже создавать в ходе выполнения, куда, в main чтоли эти строчки вписывать? Ну, чтобы сразу на форме появлялась при запуске прораммы?
в конструктор
Записан
lighting
Гость
« Ответ #19 : Май 15, 2013, 10:49 »

А если даже создавать в ходе выполнения, куда, в main чтоли эти строчки вписывать? Ну, чтобы сразу на форме появлялась при запуске прораммы? Я вообще в майн никогда ничего стараюсь не писать...
Этих вопросов не было-бы если бы вы попытались сначала разобраться с Qt прежде чем писать нужную вам программу. На велосипеде вы поди тоже сначала кататься учились, а не сразу по делам поехали. Решите для себя сначала чего вы хотите, если программу готовую получить то закажите кому-нибудь и не переживайте из-за всех этих сложностей. Ну а если хотите разобраться и научиться писать самостоятельно то начинайте изучение с начала, а не с середины (как вы сейчас сделать пытаетесь судя по вашим вопросам). В билдере наверное с Hello world начинали, вот и здесь с него начните. Ну и книжку хорошую почитайте, Бланшет или Шлее, как вам уже выше советовали, многие вопросы сами отпадут.
Записан
Alexu007
Гость
« Ответ #20 : Май 15, 2013, 21:06 »

Этих вопросов не было-бы если бы...
Ну что тут сказать? Для работы с обычной стандартной кнопкой достаточно 3-х строчек кода:

Код
C++ (Qt)
public slots:  void MyEventHandler();
 
QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(MyEventHandler()));
 
void MyWidget::MyEventHandler()    {    }

Давайте учить программирование. Начнём со справки:

Цитировать
Inherits: QAbstractButton.
...
Inherited by: QCommandLinkButton.
...
List of all members, including inherited members
Qt 3 support members
Properties
...
11 properties inherited from QAbstractButton
58 properties inherited from QWidget
1 property inherited from QObject
...
21 public functions inherited from QAbstractButton
221 public functions inherited from QWidget
29 public functions inherited from QObject
13 public functions inherited from QPaintDevice
...

Программирование - дело ответственное! И опасное! Прежде чем нажать на кнопку QpushButton, нужно прочитать про каждую из 11+58+1 properties inherited (не знаю как переводится), а затем ещё про 21=221=29+13 public functions (открытых функций), а как без этого? Вдруг чего важного упустишь... По крайней мере, с этого перечисления начинается стандартная справка. Шлее в руки, и вперёд, глядишь к концу учебного года и освоим кнопку? Хрена с два!

Я, правда, не занимался специальными изысканиями, но почему-то уверен, что приведённых в начале поста 3-х строчек кода нет ни в справке, ни у Шлея. Я их нашёл на просторах интернета, где какой-то умелец сжалился, и научил, как практически пользовать эту QpushButton.

А пока читаю Шлея, я уже научился делать окно винды из Qlabel с надписью - афигенно полезная инфа (уж лучше бы стандартное окно виндовс с единственной меткой, в которую помещаем текст хоть по нажатию кнопки - в любой программе пригодица), и застрял на философии объектной модели. Всё вокруг объекты...
Записан
thechicho
Гость
« Ответ #21 : Май 15, 2013, 21:13 »

кнопку можно из дизайнера соединить со слотом. все делается мышкой.
и еще раз повторюсь, полезной инфы в ассистанте не много, а достаточно. другими словами не надо все от корки до корки изучать. читаешь то, что нужно для решения твоей проблемы.
Записан
Alexu007
Гость
« Ответ #22 : Май 15, 2013, 21:22 »

...
Спасиб за конкретику. Но написать в таблице в моём приложении в ячейке 1,1 "Alexu007 нубас" всё равно не получается? потому что:

1. У меня в приложении есть 3 файла, myWidget.h:

Цитировать
#ifndef MYWIDGET_H
#define MYWIDGET_H

#include <QWidget>

namespace Ui {
class MyWidget;
}

class MyWidget : public QWidget
{
    Q_OBJECT
    
public:
    explicit MyWidget(QWidget *parent = 0);
    ~MyWidget();

    QTableWidgetItem * item ( int row, int column ) const;
    
private:
    Ui::MyWidget *ui;

public slots:
    void MyEventHandler();
};

#endif // MYWIDGET_H

main.cpp:

Цитировать
#include <QtGui/QApplication>
#include "mywidget.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyWidget w;
    w.show();
    
    return a.exec();
}

и mywidget.cpp:

Цитировать
#include "mywidget.h"
#include "ui_mywidget.h"

MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
    {
    ui->setupUi(this);



    QObject::connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(MyEventHandler()));
    }


MyWidget::~MyWidget()
    {
    delete ui;
    }


void MyWidget::MyEventHandler()
    {

    return;
    }

QTableWidget
Public Functions
QTableWidgetItem * item ( int row, int column ) const

QTableWidgetItem
Public Functions
virtual void setData ( int role, const QVariant & value )
void setText ( const QString & text )

Это как я понимаю, объекты, в реализацию которых ( в public) нужно вставить указанные вами строки кода. Но в моём коде автоматически не появились эти объекты, несмотря на то, что я их мышкой перетащил на форму. Поэтому я не понимаю, куда писать?

« Последнее редактирование: Май 15, 2013, 21:29 от Alexu007 » Записан
Alexu007
Гость
« Ответ #23 : Май 15, 2013, 21:27 »

кнопку можно из дизайнера соединить со слотом. все делается мышкой.
и еще раз повторюсь, полезной инфы в ассистанте не много, а достаточно. другими словами не надо все от корки до корки изучать. читаешь то, что нужно для решения твоей проблемы.
Одним соединением кнопки со слотом (мышкой) не обойдёшься, нужно ещё минимум 2 строчки кода ( в .h и в .cpp), которые нужно шаманить с бубном.
Записан
thechicho
Гость
« Ответ #24 : Май 15, 2013, 21:33 »

//Одним соединением кнопки со слотом (мышкой) не обойдёшься, нужно ещё минимум 2 строчки кода ( в .h и в .cpp), которые нужно шаманить с бубном
откуда такая уверненность Смеющийся
код автоматически сгенерируется
Записан
thechicho
Гость
« Ответ #25 : Май 15, 2013, 21:44 »


это не ты случаем? Веселый

в конструкторе, после
MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
    {
    ui->setupUi(this);

начни писать
ui->
тебе Qt Creator выдаст список виджетов. выбираешь таблицу (ui->tableWidget
далее смотришь, что есть у таблицы ui->tableWidget->
выбираешь итем ui->tableWidget->item(0, 0)
смотришь, что у него есть ui->tableWidget->item(0, 0)->
устанавливаешь ui->tableWidget->item(0, 0)->setText("Alexu007 нубас");
только убедись, что ты в дизайнере добавил хотя бы 1 строку и столбец, или упадет
Записан
Alexu007
Гость
« Ответ #26 : Май 15, 2013, 22:00 »

//Одним соединением кнопки со слотом (мышкой) не обойдёшься, нужно ещё минимум 2 строчки кода ( в .h и в .cpp), которые нужно шаманить с бубном
откуда такая уверненность Смеющийся
код автоматически сгенерируется
Ну да, чё то такое было, соединял, и она у меня по нажатию кнопки копировала из одного edit в другой, а потом по нажатии второй кнопки всё стирала. Тока я этот пример затёр, а откуда его брал, уже не помню... Но что-то смутно припоминаю, что нихрена там не сгенерировалось, там был пример, куда надо написать copy, она и скопировалась... А если что посложнее copy или там delete?

Вот это: void MyWidget::MyEventHandler()   {   }  автоматически генерируется? Это, если назвать по простому, функция, которая вызывается при нажати кнопки. И в которую можно писать код, обрабатывающий нажатие этой самой кнопки. Просто, без лишней зауми, для носорога - т.е для меня - но с помощью этой штуки я уже могу писать программы, которые как-то реагируют на нажатия кнопок. Хоть я и не понимаю, кого кнопка наследует, кого копирует, и так и далее.

Но вот чего я пока не понимаю - это как поместить в таблицу строку символов, что для этого нужно написать и в каких файлах. Тогда как таблица у меня уже в приложении, я её туда мышкой перетащил, и ни строчки кода при этом не написал.





Записан
Alexu007
Гость
« Ответ #27 : Май 15, 2013, 22:08 »


это не ты случаем? Веселый
Это я. То что в билдере получалось легко - например запись в таблицу, ну элементарная же вещь, здесь требует какого-то мозгового штурма и срача на форуме. Либо брать учебник Шлее и учить сначала всё, к середине книги как раз забудешь, нахрен тебе сдалась эта таблица...

А Шлей, кстати, ничего не написал про:

Цитировать
начни писать
ui->
« Последнее редактирование: Май 15, 2013, 22:15 от Alexu007 » Записан
Bepec
Гость
« Ответ #28 : Май 15, 2013, 22:14 »

Alexu007. Вы категорически отказываетесь понимать что-либо Улыбающийся

Поясню на примере.

С++ - это куски руды и спичка.

Qt - это готовые детали плюс инструменты для соединения их.

То, что вы не хотите даже готовые детальки соединить, это уже ваша проблема.

PS берите примеры, изучайте. Их десятки в Qt. Готовые. Рабочие. Захотите - будете писать на Qt. Не хотите - лучше закажите кому нибудь.
Записан
Alexu007
Гость
« Ответ #29 : Май 15, 2013, 22:36 »

устанавливаешь ui->tableWidget->item(0, 0)->setText("Alexu007 нубас");
только убедись, что ты в дизайнере добавил хотя бы 1 строку и столбец, или упадет
Кстати, не работает. В дизайнере установлено 10 строк 10 столбцов, и форма рисуется со строками и столбцами - могу скрин снять, а при нажатии кнопки падает (я эту строку для удобства в нажатие копки поместил). А если в конструктор - то сразу падает при запуске программы. C:\QtSDK\Alexu007\Proga1\Proga_1\debug\Proga_1.exe завершился с кодом -1073741819
Записан
Страниц: 1 [2] 3 4 5   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.07 секунд. Запросов: 20.